#include <iostream>
#include <cstdio>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
// int main(int argc,char* argv[])
// {
//     printf("argc:%d",argc);
//     for(int i = 0;i < argc;i++)
//     {
//         printf("argv[%d]:%s\n",i,argv[i]);
//     }
//     return 0;
// }

// //打印环境变量
// int main(int argc,char* argv[],char* env[])
// {
//     for(int i=0;env[i];i++)
//     {
//         printf("env[%d]:%s\n",i,env[i]);
//     }

//     return 0;
// }

// int main()
// {
//     printf("%s\n",getenv("PWD"));
// }

// int main()
// {
//     printf("errno:%d,errstring:%s\n",errno,strerror(errno));
//     FILE* fp = fopen("./log.txt","r");
//     if(fp == nullptr)
//     {
//         printf("errno:%d,errstring:%s\n",errno,strerror(errno));
//     }
//     return 0;
// }

// int main()
// {
//     pid_t id = fork();
//     if (id < 0)
//     {
//         perror("fork");
//         exit(1);
//     }
//     else if (id == 0)
//     {
//         // 子进程
//         int cur = 5;
//         while (cur)
//         {
//             std::cout << "我是一个子进程，我的pid是:" << getpid() << std::endl;
//             sleep(1);
//             cur--;
//         }
//         exit(12);
//     }
//     else
//     {
//         // 父进程
//         int status = 0;
//         pid_t rid = waitpid(-1,&status,0);
//         if(rid > 0)
//         {
//             if(WIFEXITED(status))
//             {
//                 printf("rid:%d,status:%d\n",rid,WEXITSTATUS(status));
//             }
//             else
//             {
//                 printf("error\n");
//             }
//         }
//         else 
//         {
//             perror("wait");
//             exit(2);
//         }
//         while(true)
//         {
//             std::cout << "我是父进程，我的pid是:" << getpid() << std::endl;
//             sleep(1);

//         }
//     }
//     return 0;
// }

// //非阻塞等待
// int main()
// {
//     pid_t id = fork();
//     if (id < 0)
//     {
//         perror("fork");
//         exit(1);
//     }
//     else if (id == 0)
//     {
//         // 子进程
//         int cur = 5;
//         while (cur)
//         {
//             std::cout << "我是一个子进程，我的pid是:" << getpid() << std::endl;
//             sleep(1);
//             cur--;
//         }
//         exit(12);
//     }
//     while(1)
//     {

//         // 父进程
//         pid_t rid = waitpid(-1,nullptr,1);
//         if(rid > 0)
//         {
//             std::cout << "等待成功" << std::endl;
//             break;
//         }
//         else if(rid < 0)
//         {
//             perror("wait");
//             exit(2);
//         }
//         else
//         {
//                 std::cout << "我是父进程，我的pid是:" << getpid() << std::endl;
//                 sleep(1);
//         }
//     }
//     while(1)
//     {
//         std::cout << "hello bit" << std::endl;
//                 sleep(1);

//     }
//     return 0;
// }


// int main()
// {
//     pid_t id = fork();
//     if(id < 0)
//     {
//         perror("fork");
//         exit(1);
//     }
//     else if(id == 0)
//     {
//         std::cout << "子进程pid：" << getpid() << std::endl;
//         execl("/bin/ls","ls","-l",nullptr);
        
//         exit(2);
        
//     }
//     pid_t rid = wait(nullptr);
//     if(rid > 0)
//     {
//         std::cout << "等待子进程成功" << std::endl;
//     }
//     std::cout << "父进程pid：" << getpid() << std::endl;


//     return 0;
// }

// int main()
// {
//     // char* const argv[] = {
//     //     (char*)"ls",
//     //     (char*)"-a",
//     //     (char*)"-l",
//     //     nullptr
//     // };
//     // execv("/usr/bin/ls",argv);

//     execlp("ls","ls","-a","-l",nullptr);
//     return 0;
// }
